﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Dao.Intermediarios;
using Dao;

namespace _InformaticaIndustrial_DerivdosVinicos.Interfaz
{
	public partial class BMMaestroArticulo : Form
	{
		private Principal principal;
		IPTipoMaestroArticulo iPTipoMaestroArticulo = new IPTipoMaestroArticulo();
		IPMateriaPrima ipMateriaPrima = new IPMateriaPrima();
		IPComponente ipComponente = new IPComponente();
		IPProductoProcesoElaboracion ipPPE = new IPProductoProcesoElaboracion();

		public BMMaestroArticulo(Principal principal)
		{
			InitializeComponent();
			this.principal = principal;
			LoadCombo();
		}

		private void LoadCombo()
		{
			cbTipoArt.DataSource = iPTipoMaestroArticulo.getAll<TipoMaestroArticulo>();
		}

		private void buttonCancelar_Click(object sender, EventArgs e)
		{
			this.Close();
		}

		private void cbTipoArt_SelectedValueChanged(object sender, EventArgs e)
		{
            List<string> propMP = new List<string>();
            int i = 0;
			try
			{
				switch (cbTipoArt.SelectedValue.ToString())
				{
					case "1":
						List<MateriaPrima> materiaPrimaList = ipMateriaPrima.getAll<MateriaPrima>().Where(m => m.Activo == true).ToList();
                        dataGridViewMA.DataSource = ipMateriaPrima.getAll<MateriaPrima>().Where(m => m.Activo == true).ToList();
                        //dataGridViewMA.DataSource = ;

                        foreach (MateriaPrima mp in materiaPrimaList)
                        {
                           // dataGridViewMA.DataSource = mp;
                            dataGridViewMA.Rows[i].Cells["ModeloActual"].Value = mp.ModeloInventario.NombreModelo;
                            i += 1;
                        }

						break;
					case "2":
						dataGridViewMA.DataSource = ipComponente.getAll<Componente>().Where(m => m.Activo == true).ToList();

                        //for (int i = 0; i < dataGridViewMA.Rows.Count; i++)
                        //{
                        //    Componente comp = (Componente)dataGridViewMA.Rows[i].DataBoundItem;
                        //    dataGridViewMA.Rows[i].Cells[2].Value = comp.codigo.ToString();
                        //}
						break;
					case "3":
						dataGridViewMA.DataSource = ipPPE.getAll<ProductoProcesoElaboracion>().Where(m => m.Activo == true).ToList();

                        //for (int i = 0; i < dataGridViewMA.Rows.Count; i++)
                        //{
                        //    ProductoProcesoElaboracion pe = (ProductoProcesoElaboracion)dataGridViewMA.Rows[i].DataBoundItem;
                        //    dataGridViewMA.Rows[i].Cells[2].Value = pe.codigo.ToString();
                        //}
						break;
					default:
						break;
				}
			}
			catch (Exception)
			{
				throw;
			}
		}

		private void buttonBuscar_Click(object sender, EventArgs e)
		{
			try
			{
				if (textBoxBuscar.Text.Equals(""))
				{
					dataGridViewMA.DataSource = ipMateriaPrima.getAll<CentroTrabajo>();
				}
				else
				{
					//dataGridViewMA.DataSource = ipCentroTrabajo.getByCriterio<CentroTrabajo>("", "=", textBoxBuscar.Text);
				}
			}
			catch (Exception)
			{
				throw;
			}
		}

		private void dataGridViewMA_CellContentClick(object sender, DataGridViewCellEventArgs e)
		{
			switch (e.ColumnIndex)
			{
				case 0:
					modificarMA(e.RowIndex);
					break;
				case 1:
					eliminarMA(e.RowIndex);
					break;
				default:
					break;
			}
		}

		private void modificarMA(int r)
		{
			try
			{
				switch (cbTipoArt.SelectedValue.ToString())
				{
					case "1":
						MateriaPrima matprima = (MateriaPrima)(dataGridViewMA.Rows[r].DataBoundItem);

                        if (dataGridViewMA.Rows[r].Cells["ModInv"].Value != null)
                        {
                            if (dataGridViewMA.Rows[r].Cells["ModInv"].Value.ToString() == "Lote Fijo")
                            {
                                matprima.ModeloInventario = new IPModeloInventario().getAll<ModeloInventario>().Where(mi => mi.Id == 1).SingleOrDefault();
                            }
                            else if (dataGridViewMA.Rows[r].Cells["ModInv"].Value.ToString() == "Intervalo Fijo")
                            {
                                matprima.ModeloInventario = new IPModeloInventario().getAll<ModeloInventario>().Where(mi => mi.Id == 2).SingleOrDefault();
                            }
                            else
                            {
                                matprima.ModeloInventario = new IPModeloInventario().getAll<ModeloInventario>().Where(com => com.Id == 3).SingleOrDefault();
                            }
                        }

						Intermediario.confirmarCambios();
						MessageBox.Show("Materia Prima Modificada");

						break;
					case "2":
						Componente comp = (Componente)(dataGridViewMA.Rows[r].DataBoundItem);

                        if (dataGridViewMA.Rows[r].Cells["ModInv"].Value.ToString() == "Lote Fijo")
                        {
                            comp.ModeloInventario = new IPModeloInventario().getAll<ModeloInventario>().Where(com => com.Id == 1).SingleOrDefault();
                        }
                        else if (dataGridViewMA.Rows[r].Cells["ModInv"].Value.ToString() == "Inventario Fijo")
                        {
                            comp.ModeloInventario = new IPModeloInventario().getAll<ModeloInventario>().Where(com => com.Id == 2).SingleOrDefault();  
                        }
                        else
                        {
                            comp.ModeloInventario = new IPModeloInventario().getAll<ModeloInventario>().Where(com => com.Id == 3).SingleOrDefault();  
                        }

						Intermediario.confirmarCambios();
						MessageBox.Show("Componente Modificado");
						break;
					case "3":
						ProductoProcesoElaboracion proProcElab = (ProductoProcesoElaboracion)(dataGridViewMA.Rows[r].DataBoundItem);

                        if (dataGridViewMA.Rows[r].Cells["ModInv"].Value.ToString() == "Lote Fijo")
                        {
                            proProcElab.ModeloInventario = new IPModeloInventario().getAll<ModeloInventario>().Where(ppelab => ppelab.Id == 1).SingleOrDefault();
                        }
                        else if (dataGridViewMA.Rows[r].Cells["ModInv"].Value.ToString() == "Inventario Fijo")
                        {
                            proProcElab.ModeloInventario = new IPModeloInventario().getAll<ModeloInventario>().Where(ppelab => ppelab.Id == 2).SingleOrDefault();
                        }
                        else
                        {
                            proProcElab.ModeloInventario = new IPModeloInventario().getAll<ModeloInventario>().Where(com => com.Id == 3).SingleOrDefault();
                        }

						Intermediario.confirmarCambios();
						MessageBox.Show("Producto en Proceso de Elaboración Modificado");
						break;
					default:
						break;
				}
			}
			catch (Exception)
			{
				throw;
			}
		}

		private void eliminarMA(int r)
		{
			cbTipoArt.Enabled = false;

			try
			{
				switch (cbTipoArt.SelectedValue.ToString())
				{
					case "1":
                        IList<EstructuraProducto> eprod = new IPEstructuraProducto().getCriterioById<EstructuraProducto>("", "", Convert.ToInt16(dataGridViewMA.Rows[r].Cells["IdMP"].Value));

                        if (eprod.Count == 0)
                        {
                            ipMateriaPrima.Delete(Convert.ToInt16(dataGridViewMA.Rows[r].Cells["IdMP"].Value));
                            MessageBox.Show("Materia Prima Eliminada");
                        }
                        else
                        {
                            MessageBox.Show("Materia Prima asociada a una estructura producto");
                        }
						break;
					case "2":
                        IList<EstructuraProducto> ep = new IPEstructuraProducto().getCriterioById<EstructuraProducto>("", "", Convert.ToInt16(dataGridViewMA.Rows[r].Cells["IdComponente"].Value));

                        if (ep.Count == 0)
                        {
                            ipComponente.Delete(Convert.ToInt16(dataGridViewMA.Rows[r].Cells["IdComponente"].Value));
                            MessageBox.Show("Componente Eliminado");
                        }
                        else
                        {
                            MessageBox.Show("Componente asociado a una estructura producto");
                        }
						break;
					case "3":
						ipPPE.Delete(Convert.ToInt16(dataGridViewMA.Rows[r].Cells["IdPPE"].Value));

                        IList<EstructuraProducto> epr = new IPEstructuraProducto().getCriterioById<EstructuraProducto>("", "", Convert.ToInt16(dataGridViewMA.Rows[r].Cells["IdPPE"].Value));

                        if (epr.Count == 0)
                        {
                            ipComponente.Delete(Convert.ToInt16(dataGridViewMA.Rows[r].Cells["IdPPE"].Value));
                            MessageBox.Show("Producto en Proceso de Elaboración Eliminado");
                        }
                        else
                        {
                            MessageBox.Show("Producto en Proceso de Elaboración asociado a una estructura producto");
                        }
						break;
					default:
						break;
				}

				cbTipoArt_SelectedValueChanged(null, null);
			}
			catch (Exception)
			{
				throw;
			}
		}
	}
}
